package com.hz.sdka.commona.utils;

import android.os.Environment;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class LogUtils {

    private static String TAG = "HZSDK";
    private static boolean isDebug = false;

    public LogUtils() {

    }

    private static boolean isDebug() {
        return isDebug;
    }

    public static ArrayList<String> LogList = new ArrayList<>();

    public static void logInL(String tag, String msg) {
        if (isDebug()) {
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            addLogInLocal(sdf.format(new Date()) + " " + tag + ":" + msg);
        }
    }

    private static void addLogInLocal(String log) {
        if (LogList.size() > 10000) {
            LogList.clear();
        }
        LogList.add(log);
    }

    public static void clearLoacalLog() {
        LogList.clear();
    }


    private static File debugFile;

    private static boolean existsDebugFile() {
        if (debugFile == null) {
            debugFile = new File(Environment.getExternalStorageDirectory(), ".hzDebug");
        }
        return debugFile.exists();
    }

    public static void v(String msg) {
        v(TAG, msg);
    }

    public static void v(String msg, Throwable tr) {
        v(TAG, msg, tr);
    }

    public static void v(String tag, String msg) {
        if (isDebug()) {
            Log.v(tag, msg);
        }
    }

    public static void v(String tag, String msg, Throwable tr) {
        if (isDebug()) {
            Log.v(tag, msg, tr);
        }
    }

    public static void d(String msg) {
        d(TAG, msg);
    }

    public static void d(String msg, Throwable tr) {
        d(TAG, msg, tr);
    }

    public static void d(String tag, String msg) {
        if (isDebug()) {
            Log.d(tag, msg);
        }
    }

    public static void d(String tag, String msg, Throwable tr) {
        if (isDebug()) {
            Log.d(tag, msg, tr);
        }
    }

    public static void i(String msg) {
        i(TAG, msg);
    }

    public static void i(String msg, Throwable tr) {
        i(TAG, msg, tr);
    }

    public static void i(String tag, String msg) {
        if (isDebug()) {
            Log.i(tag, msg);
        }
    }

    public static void i(String tag, String msg, Throwable tr) {
        if (isDebug()) {
            Log.i(tag, msg, tr);
        }
    }

    public static void w(String msg) {
        w(TAG, msg);
    }

    public static void w(String msg, Throwable tr) {
        w(TAG, msg, tr);
    }

    public static void w(String tag, String msg) {
        if (isDebug()) {
            Log.w(tag, msg);
        }
    }

    public static void w(String tag, String msg, Throwable tr) {
        if (isDebug()) {
            Log.w(tag, msg, tr);
        }
    }

    public static void e(String msg) {
        e(TAG, msg);
    }

    public static void e(String msg, Throwable tr) {
        e(TAG, msg, tr);
    }

    public static void e(String tag, String msg) {
        if (isDebug()) {
            Log.e(tag, msg);
        }
    }

    public static void e(String tag, String msg, Throwable tr) {
        if (isDebug()) {
            Log.e(tag, msg, tr);
        }
    }

    public static final String LINE_SEPARATOR = System.getProperty("line.separator");

    private static synchronized void printLine(String tag, boolean isTop) {
        if (isTop) {
            Log.d(tag, "╔═══════════════════════════════════════════════════════════════════════════════════════");
        } else {
            Log.d(tag, "╚═══════════════════════════════════════════════════════════════════════════════════════");
        }
    }

    public static synchronized void printJson(String msg, String headString) {
        if (isDebug()) {
            String tag = "HZ_HTTP";
            String message;

            try {
                if (msg.startsWith("{")) {
                    JSONObject jsonObject = new JSONObject(msg);
                    message = jsonObject.toString(4);//最重要的方法，就一行，返回格式化的json字符串，其中的数字4是缩进字符数
                } else if (msg.startsWith("[")) {
                    JSONArray jsonArray = new JSONArray(msg);
                    message = jsonArray.toString(4);
                } else {
                    message = msg;
                }
            } catch (JSONException e) {
                message = msg;
            }

            printLine(tag, true);
            message = headString + LINE_SEPARATOR + message;
            String[] lines = message.split(LINE_SEPARATOR);
            for (String line : lines) {
                Log.d(tag, "║ " + line);
            }
            printLine(tag, false);
        }
    }

    public static void setDebug(boolean isDebug) {
        LogUtils.isDebug = isDebug;
    }
}
